package rdd.operate;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;


//rdd对不同分区的处理。
//分区是队列，先进先出，先来的数据先处理。
//不同分区之间，互不影响，不确定哪个分区的数据先出来，因为分区之间是并行运行的
//同一个分区中，一个数据把所有的rdd执行完毕后，下一个数据才会进入rdd进行处理
public class Spark40_Operate_Map {
    public static void main(String[] args) {
        final List<Integer> nums = Arrays.asList(1,2,3,4);
        final SparkConf conf = new SparkConf();
        //如果设置单线程local进行处理，输出的结果一定是3412或者1234，因为在最后输出的过程中，只有单线程处理，只能一次输入一个分区内的数据
        conf.setMaster("local[2]");
        conf.setAppName("spark");
        final JavaSparkContext jsc = new JavaSparkContext(conf);
        final JavaRDD<Integer> rdd = jsc.parallelize(nums,2);
        //第一个rdd
        final JavaRDD<Integer> newrdd = rdd.map(
                num -> {
                    System.out.println("@" + num);
                    return num;
                });

        //第二个rdd
        final JavaRDD<Integer> newrdd1 = newrdd.map(
                num -> {
                    System.out.println("###" + num);
                    return num;
                });
        newrdd1.collect().forEach(System.out::println);
    }
}
